package ec.edu.ups.relevo.vista.controlador;

import java.io.Serializable;
import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import ec.edu.ups.relevo.datos.dao.UsuarioDAO;
import ec.edu.ups.relevo.datos.modeloBD.Usuario;

@ManagedBean
@SessionScoped
public class SesionBean implements Serializable{

	/**
	 * Dependencias
	 */
	@Inject UsuarioDAO udao;
	
	
	/**
	 * Atributos  de bean
	 */
	private String usuario="";
	private String clave="";
	private boolean logueado=false;
	private Usuario usr=null;
	
	
	
	/**
	 * Encapsulacion de atributos
	 */
	public String getClave() {return clave;}
	public void setClave(String clave) { this.clave = clave; }
	public String getUsuario() {return usuario;}
	public void setUsuario(String usuario) {this.usuario = usuario;}
	public boolean isLogueado() {return logueado;}
	public void setLogueado(boolean logueado) {	this.logueado = logueado;}
	public Usuario getUsr() {return usr;}
	public void setUsr(Usuario usr) {	this.usr = usr;	}
	
	
	/**
	 *Action Controllers 
	 */
	public String login()
	{
		logueado=false;
		ExternalContext cntxt = FacesContext.getCurrentInstance().getExternalContext();
		HttpServletRequest req = (HttpServletRequest) cntxt.getRequest();
		System.out.println("Login");
		try {
			req.logout();
			req.login(this.usuario, this.clave);
			logueado=true;
			usr=udao.buscarByNick(usuario);
			usr.setUltimoAcceso(new Date());
			udao.update(usr);
		} catch (Exception e)
		{
			try
			{
				///////Proceso que intenta loguear con el mail
					usr=udao.buscarByMail(usuario);
					if(usr!=null)
					{	
						req.login(usr.getUsuario(), this.clave);
						logueado=true;
						usr.setUltimoAcceso(new Date());
						udao.update(usr);
					}
			}catch (Exception e2){}
			
			
		}
		if(logueado)
		{
			return "/home.xhtml?faces-redirect=true";
		}
		
		else return null;
	}
	
	/**
	En este codigo se realiza el cierre de sesion y se enceran los campos
	*/
	public String logout()
	{
	try 
	{
		logueado=false;
		ExternalContext cntxt = FacesContext.getCurrentInstance().getExternalContext();
		HttpServletRequest req = (HttpServletRequest) cntxt.getRequest();
		req.logout();
		req.getSession().invalidate();//mata la sesion
		usuario = "";
		clave="";
	} catch (Exception e)
	{

	e.printStackTrace();
	}
	return "/home.xhtml?faces-redirect=true";
	}
	
	
	
	/**
	 * Verifica si el usario que esta logueado tiene un rol en particular
	 * @param rol
	 * @return
	 */
	public boolean tieneRol(String rol)
	{

		try {
	
		ExternalContext cntxt = FacesContext.getCurrentInstance().getExternalContext();
		HttpServletRequest req = (HttpServletRequest) cntxt.getRequest();
		if(req.isUserInRole(rol))
			return true;
		
		} catch (Exception e)
		{	}
		return false;
		}
	
	
	}
